Hi In My application I am developing android chatting feature using gcm for that this is my code.I have two fields name and mobile number and button login Now.
Clicking Login Button then it will show who are online it will after using gcm i can send messages.
But clicking login Button I am getting unfortunately error and showing Service_not_Available it showing this message.
Can any one please help me how to solve this issue
MainActivity.java
public class MainActivity extends Activity {
private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000;
String SENDER_ID = "689402109398";
static final String TAG = "L2C";
GoogleCloudMessaging gcm;
SharedPreferences prefs;
Context context;
String regid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
prefs = getSharedPreferences("Chat", 0);
context = getApplicationContext();
if(!prefs.getString("REG_FROM","").isEmpty()){
Fragment user = new UserFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, user);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
}else if(!prefs.getString("REG_ID", "").isEmpty()){
Fragment reg = new LoginFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, reg);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
}else if(checkPlayServices()){
new Register().execute();
}else{
Toast.makeText(getApplicationContext(),"This device is not supported",Toast.LENGTH_SHORT).show();
}
}
private boolean checkPlayServices() {
int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (resultCode != ConnectionResult.SUCCESS) {
if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
GooglePlayServicesUtil.getErrorDialog(resultCode, this,
PLAY_SERVICES_RESOLUTION_REQUEST).show();
} else {
Log.i(TAG, "This device is not supported.");
finish();
}
return false;
}
return true;
}
private class Register extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... args) {
try {
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(context);
regid = gcm.register(SENDER_ID);
Log.e("RegId",regid);
SharedPreferences.Editor edit = prefs.edit();
edit.putString("REG_ID", regid);
edit.commit();
}
return regid;
} catch (IOException ex) {
Log.e("Error", ex.getMessage());
return "Fails";
}
}
@Override
protected void onPostExecute(String json) {
Fragment reg = new LoginFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, reg);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
}
}
UserFragmen.java
public class UserFragment extends Fragment {
ListView list;
ArrayList<HashMap<String, String>> users = new ArrayList<HashMap<String, String>>();
Button refresh,logout;
List<NameValuePair> params;
SharedPreferences prefs;
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
View view =inflater.inflate(R.layout.user_fragment, container, false);
prefs = getActivity().getSharedPreferences("Chat", 0);
list = (ListView)view.findViewById(R.id.listView);
refresh = (Button)view.findViewById(R.id.refresh);
logout = (Button)view.findViewById(R.id.logout);
logout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Logout().execute();
}
});
refresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentById(R.id.content_frame)).commit();
Fragment reg = new UserFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, reg);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
}
});
new Load().execute();
return view;
}
private class Load extends AsyncTask<String, String, JSONArray> {
@Override
protected JSONArray doInBackground(String... args) {
JSONParser json = new JSONParser();
params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("mobno", prefs.getString("REG_FROM","")));
JSONArray jAry = json.getJSONArray("http://10.0.2.2/getuser",params);
return jAry;
}
@Override
protected void onPostExecute(JSONArray json) {
for(int i = 0; i < json.length(); i++){
JSONObject c = null;
try {
c = json.getJSONObject(i);
String name = c.getString("name");
String mobno = c.getString("mobno");
HashMap<String, String> map = new HashMap<String, String>();
map.put("name", name);
map.put("mobno", mobno);
users.add(map);
} catch (JSONException e) {
e.printStackTrace();
}
}
ListAdapter adapter = new SimpleAdapter(getActivity(), users,
R.layout.user_list_single,
new String[] { "name","mobno" }, new int[] {
R.id.name, R.id.mobno});
list.setAdapter(adapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Bundle args = new Bundle();
args.putString("mobno", users.get(position).get("mobno"));
Intent chat = new Intent(getActivity(), ChatActivity.class);
chat.putExtra("INFO", args);
startActivity(chat);
}
});
}
}
private class Logout extends AsyncTask<String, String, JSONObject> {
@Override
protected JSONObject doInBackground(String... args) {
JSONParser json = new JSONParser();
params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("mobno", prefs.getString("REG_FROM","")));
JSONObject jObj = json.getJSONFromUrl("http://10.0.2.2/chat/logout",params);
return jObj;
}
@Override
protected void onPostExecute(JSONObject json) {
String res = null;
try {
res = json.getString("response");
Toast.makeText(getActivity(),res,Toast.LENGTH_SHORT).show();
if(res.equals("Removed Sucessfully")) {
Fragment reg = new LoginFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, reg);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
SharedPreferences.Editor edit = prefs.edit();
edit.putString("REG_FROM", "");
edit.commit();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
**LoginFragment **
public class LoginFragment extends Fragment {
SharedPreferences prefs;
EditText name, mobno;
Button login;
List<NameValuePair> params;
ProgressDialog progress;
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.login_fragment, container, false);
prefs = getActivity().getSharedPreferences("Chat", 0);
name = (EditText)view.findViewById(R.id.name);
mobno = (EditText)view.findViewById(R.id.mobno);
login = (Button)view.findViewById(R.id.log_btn);
progress = new ProgressDialog(getActivity());
progress.setMessage("Registering ...");
progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progress.setIndeterminate(true);
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progress.show();
SharedPreferences.Editor edit = prefs.edit();
edit.putString("REG_FROM", mobno.getText().toString());
edit.putString("FROM_NAME", name.getText().toString());
edit.commit();
new Login().execute();
}
});
return view;
}
private class Login extends AsyncTask<String, String, JSONObject> {
@Override
protected JSONObject doInBackground(String... args) {
JSONParser json = new JSONParser();
params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("name", name.getText().toString()));
params.add(new BasicNameValuePair("mobno", mobno.getText().toString()));
params.add((new BasicNameValuePair("reg_id",prefs.getString("REG_ID",""))));
JSONObject jObj = json.getJSONFromUrl("http://10.0.2.2/login",params);
return jObj;
}
@Override
protected void onPostExecute(JSONObject json) {
progress.dismiss();
try {
String res = json.getString("response");
if(res.equals("Sucessfully Registered")) {
Fragment reg = new UserFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, reg);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
}else{
Toast.makeText(getActivity(),res,Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
Logcat
12-24 03:26:46.087: E/Error(1915): SERVICE_NOT_AVAILABLE
12-24 03:28:52.087: W/System.err(1939): org.apache.http.conn.HttpHostConnectException: Connection to http://10.0.2.2:8660 refused
12-24 03:28:52.147: W/System.err(1939): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183)
12-24 03:28:52.147: W/System.err(1939): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
12-24 03:28:52.147: W/System.err(1939): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
12-24 03:28:52.177: W/System.err(1939): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:452)
12-24 03:28:52.177: W/System.err(1939): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
12-24 03:28:52.187: W/System.err(1939): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
12-24 03:28:52.187: W/System.err(1939): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
12-24 03:28:52.187: W/System.err(1939): at com.example.androidchat.JSONParser.getJSONFromUrl(JSONParser.java:41)
12-24 03:28:52.187: W/System.err(1939): at com.example.androidchat.LoginFragment$Login.doInBackground(LoginFragment.java:74)
12-24 03:28:52.187: W/System.err(1939): at com.example.androidchat.LoginFragment$Login.doInBackground(LoginFragment.java:1)
12-24 03:28:52.187: W/System.err(1939): at android.os.AsyncTask$2.call(AsyncTask.java:288)
12-24 03:28:52.337: W/System.err(1939): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
12-24 03:28:52.347: W/System.err(1939): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
12-24 03:28:52.377: W/System.err(1939): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-24 03:28:52.377: W/System.err(1939): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-24 03:28:52.387: W/System.err(1939): at java.lang.Thread.run(Thread.java:841)
12-24 03:28:52.387: W/System.err(1939): Caused by: java.net.ConnectException: failed to connect to /10.0.2.2 (port 8660): connect failed: ETIMEDOUT (Connection timed out)
12-24 03:28:52.407: I/Choreographer(1939): Skipped 30 frames! The application may be doing too much work on its main thread.
12-24 03:28:52.427: W/System.err(1939): at libcore.io.IoBridge.connect(IoBridge.java:114)
12-24 03:28:52.437: W/System.err(1939): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
12-24 03:28:52.437: W/System.err(1939): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
12-24 03:28:52.437: W/System.err(1939): at java.net.Socket.connect(Socket.java:843)
12-24 03:28:52.437: W/System.err(1939): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
12-24 03:28:52.437: W/System.err(1939): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
12-24 03:28:52.437: W/System.err(1939): ... 15 more
12-24 03:28:52.497: I/Choreographer(1939): Skipped 52 frames! The application may be doing too much work on its main thread.
12-24 03:28:52.617: I/Choreographer(1939): Skipped 30 frames! The application may be doing too much work on its main thread.
12-24 03:28:52.947: W/System.err(1939): Caused by: libcore.io.ErrnoException: connect failed: ETIMEDOUT (Connection timed out)
12-24 03:28:53.007: I/Choreographer(1939): Skipped 36 frames! The application may be doing too much work on its main thread.
12-24 03:28:53.087: I/Choreographer(1939): Skipped 30 frames! The application may be doing too much work on its main thread.
12-24 03:28:53.117: W/System.err(1939): at libcore.io.Posix.connect(Native Method)
12-24 03:28:53.117: W/System.err(1939): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
12-24 03:28:53.117: W/System.err(1939): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
12-24 03:28:53.117: W/System.err(1939): at libcore.io.IoBridge.connect(IoBridge.java:112)
12-24 03:28:53.117: W/System.err(1939): ... 20 more
12-24 03:28:53.117: E/Buffer Error(1939): Error converting result java.lang.NullPointerException: lock == null
12-24 03:28:53.187: I/Choreographer(1939): Skipped 62 frames! The application may be doing too much work on its main thread.
12-24 03:28:53.457: E/JSON Parser(1939): Error parsing data org.json.JSONException: End of input at character 0 of
12-24 03:28:53.497: I/Choreographer(1939): Skipped 36 frames! The application may be doing too much work on its main thread.
12-24 03:28:53.697: D/AndroidRuntime(1939): Shutting down VM
12-24 03:28:53.697: W/dalvikvm(1939): threadid=1: thread exiting with uncaught exception (group=0xb2ae2ba8)
12-24 03:28:53.807: E/AndroidRuntime(1939): FATAL EXCEPTION: main
12-24 03:28:53.807: E/AndroidRuntime(1939): Process: com.example.androidchat, PID: 1939
12-24 03:28:53.807: E/AndroidRuntime(1939): java.lang.NullPointerException
12-24 03:28:53.807: E/AndroidRuntime(1939): at com.example.androidchat.LoginFragment$Login.onPostExecute(LoginFragment.java:84)
12-24 03:28:53.807: E/AndroidRuntime(1939): at com.example.androidchat.LoginFragment$Login.onPostExecute(LoginFragment.java:1)
12-24 03:28:53.807: E/AndroidRuntime(1939): at android.os.AsyncTask.finish(AsyncTask.java:632)
12-24 03:28:53.807: E/AndroidRuntime(1939): at android.os.AsyncTask.access$600(AsyncTask.java:177)
12-24 03:28:53.807: E/AndroidRuntime(1939): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
12-24 03:28:53.807: E/AndroidRuntime(1939): at android.os.Handler.dispatchMessage(Handler.java:102)
12-24 03:28:53.807: E/AndroidRuntime(1939): at android.os.Looper.loop(Looper.java:136)
12-24 03:28:53.807: E/AndroidRuntime(1939): at android.app.ActivityThread.main(ActivityThread.java:5017)
12-24 03:28:53.807: E/AndroidRuntime(1939): at java.lang.reflect.Method.invokeNative(Native Method)
12-24 03:28:53.807: E/AndroidRuntime(1939): at java.lang.reflect.Method.invoke(Method.java:515)
12-24 03:28:53.807: E/AndroidRuntime(1939): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
12-24 03:28:53.807: E/AndroidRuntime(1939): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
12-24 03:28:53.807: E/AndroidRuntime(1939): at dalvik.system.NativeStart.main(Native Method)
12-24 03:28:58.477: I/Process(1939): Sending signal. PID: 1939 SIG: 9
12-24 03:29:05.277: D/dalvikvm(1976): GC_FOR_ALLOC freed 114K, 7% free 2849K/3036K, paused 183ms, total 187ms
12-24 03:29:06.027: I/Choreographer(1976): Skipped 73 frames! The application may be doing too much work on its main thread.
12-24 03:29:06.067: D/gralloc_goldfish(1976): Emulator without GPU emulation detected.
12-24 03:29:06.267: I/Choreographer(1976): Skipped 152 frames! The application may be doing too much work on its main thread.
12-24 03:29:07.187: D/dalvikvm(1976): GC_FOR_ALLOC freed 118K, 6% free 3242K/3428K, paused 34ms, total 34ms