2015-02-05 3 views
1

Я просто:Android HttpPost does'nt работа

 HttpClient httpClient = new DefaultHttpClient(); 
     // Creating HTTP Post 
     HttpPost httpPost = new HttpPost(
       "http://www.google.com/"); 


     // Making HTTP Request 
     try { 
      HttpResponse response = (HttpResponse) httpClient.execute(httpPost); 
      // writing response to log 
      Log.d("Http Response:", response.toString()); 
     } catch (ClientProtocolException e) { 
      // writing exception to log 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // writing exception to log 
      e.printStackTrace(); 

     } 

Но когда я запустить приложение, он выходит из строя и не работает :(

это мой журнал:

02-05 14:33:42.217: E/AndroidRuntime(25026): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.myapppp/com.app.myapppp.Main}: android.os.NetworkOnMainThreadException 
02-05 14:33:42.217: E/AndroidRuntime(25026): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at android.app.ActivityThread.access$700(ActivityThread.java:140) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at android.os.Looper.loop(Looper.java:137) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at android.app.ActivityThread.main(ActivityThread.java:4921) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at java.lang.reflect.Method.invokeNative(Native Method) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at java.lang.reflect.Method.invoke(Method.java:511) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at dalvik.system.NativeStart.main(Native Method) 
02-05 14:33:42.217: E/AndroidRuntime(25026): Caused by: android.os.NetworkOnMainThreadException 
02-05 14:33:42.217: E/AndroidRuntime(25026): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at java.net.InetAddress.getAllByName(InetAddress.java:214) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:670) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:509) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at com.app.myapppp.Main.onCreate(Main.java:133) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at android.app.Activity.performCreate(Activity.java:5206) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094) 
02-05 14:33:42.217: E/AndroidRuntime(25026): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074) 
02-05 14:33:42.217: E/AndroidRuntime(25026): ... 11 more 
+0

http://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception это решение, пожалуйста, поиск задолго до публикации. –

ответ

0

Сделайте свой вызов API с помощью AsyncTask, например Example

Щелкните по вызову API или как в основном методе

public void onClick(View v) { 
// TODO Auto-generated method stub 
if(value.getText().toString().length()<1){ 
// out of range 
Toast.makeText(this, "please enter something", Toast.LENGTH_LONG).show(); 
}else{ 
pb.setVisibility(View.VISIBLE); 
new MyAsyncTask().execute(value.getText().toString()); 
} 
} 

AsynckTask

private class MyAsyncTask extends AsyncTask<String, Integer, Double>{ 
@Override 
protected Double doInBackground(String... params) { 
// TODO Auto-generated method stub 
postData(params[0]); 
return null; 
} 
} 

// MyAsyncTask

private class MyAsyncTask extends AsyncTask<String, Integer, Double>{ 
@Override 
protected Double doInBackground(String... params) { 
// TODO Auto-generated method stub 
postData(params[0]); 
return null; 
} 

protected void onPostExecute(Double result){ 
pb.setVisibility(View.GONE); 
Toast.makeText(getApplicationContext(), "command sent", Toast.LENGTH_LONG).show(); 
} 
protected void onProgressUpdate(Integer... progress){ 
pb.setProgress(progress[0]); 
} 
} 

Ваш API называют метод

public void postData(String valueIWantToSend) { 

HttpClient httpclient = new DefaultHttpClient(); 
// specify the URL you want to post to 
HttpPost httppost = new HttpPost("http://www.google.com/"); 
try { 
// create a list to store HTTP variables and their values 
List nameValuePairs = new ArrayList(); 
// add an HTTP variable and value pair 
nameValuePairs.add(new BasicNameValuePair("myHttpData", valueIwantToSend)); 
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
// send the variable and value, in other words post, to the URL 
HttpResponse response = httpclient.execute(httppost); 
} catch (ClientProtocolException e) { 
// process execption 
} catch (IOException e) { 
// process execption 
} 
} 
0

Это происходит потому, что вы пытаетесь делать операции, связанные сети в вашей основной Мероприятия. Что не допускается, а является плохим способом выполнения связанной с сетью задачи. Для выполнения такой задачи существуют другие способы, например, вы можете сделать это с помощью класса AsyncTask.

Это позволяет выполнять всю эту большую задачу на фоне вашего приложения. Так что ваш основной поток не подходит к занятому, что, по-видимому, приводит к сбою приложения.

документация http://developer.android.com/reference/android/os/AsyncTask.html

простой пример AsyncTask http://programmerguru.com/android-tutorial/android-asynctask-example/