2015-06-11 4 views
2

Я создал простейшую программу, по умолчанию один и я хочу, чтобы попытаться опубликовать и retrive что-то от страницы PHP MyActivty.Java выглядит следующим образом:Android Java Http Request Сообщение

package com.dolganiuc.victor.myapplication; 

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.util.Log; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 

public class MainActivity extends ActionBarActivity { 

    private static final String TAG = "victorMessage"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Log.i(TAG, "onCreate"); 
     postData(); 


    } 

    public void postData() { 

     // Create a new HttpClient and Post Header 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://93.117.158.187/"); 

     try { 
      // Add your data 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
      nameValuePairs.add(new BasicNameValuePair("id", "12345")); 
      nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!")); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

      // Execute HTTP Post Request 
      HttpResponse response = httpclient.execute(httppost); 

      Log.i(TAG, response.toString()); 
     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
     } 

    } 

} 

И когда Android Studio debugs, что все работает нормально, и я запустил это приложение на 2 devecies Android 4.4.2 KitKat и Android 5.0 Lollipop, и на обоих устройствах приложение закрывает ошибку восстановления. Неудачно MyApplication закрылся.

В чем проблема?

System.err

06-11 13:18:02.042 1142-1161/? W/System.err﹕ java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference 
06-11 13:18:02.042 1142-1161/? W/System.err﹕ at com.android.internal.telephony.PhoneBase.privatizeCellInfoList(PhoneBase.java:1252) 
06-11 13:18:02.042 1142-1161/? W/System.err﹕ at com.android.internal.telephony.PhoneBase.getAllCellInfo(PhoneBase.java:1240) 
06-11 13:18:02.042 1142-1161/? W/System.err﹕ at com.android.internal.telephony.PhoneProxy.getAllCellInfo(PhoneProxy.java:337) 
06-11 13:18:02.042 1142-1161/? W/System.err﹕ at com.android.phone.PhoneInterfaceManager.getAllCellInfo(PhoneInterfaceManager.java:1486) 
06-11 13:18:02.042 1142-1161/? W/System.err﹕ at com.android.internal.telephony.ITelephony$Stub.onTransact(ITelephony.java:691) 
06-11 13:18:02.042 1142-1161/? W/System.err﹕ at android.os.Binder.execTransact(Binder.java:446) 
+2

ли вы разделяете ошибку LogCat? – Shailesh

+0

подключите ваше устройство к своей студии android и запустите приложение непосредственно из студии в устройство на эмулятор, а затем покажите нам лог cat –

+0

Добавили ли вы разрешение на использование Интернета в файле манифеста \ –

ответ

2

первая проблема может быть, что вы не добавить INTERNET разрешения в вашем AndroidManifest.xml. Чтобы решить эту проблему, просто добавьте эту строку <uses-permission android:name="android.permission.INTERNET" /> в ваш манифест.

прочее проблема в том, что вы пытаетесь выполнить запрос на отправку по основному потоку. Это вызывает NetworkOnMainThreadException. Вы должны использовать AsyncTask или Handler для выполнения сетевых запросов, например:

public class MainActivity extends ActionBarActivity { 

    private static final String TAG = "victorMessage"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Log.i(TAG, "onCreate"); 
     new HttpPostTask().execute(); 
    } 

    private class HttpPostTask extends AsyncTask<Void, Void, String> { 

     @Override 
     protected String doInBackground(Void... params) { 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://93.117.158.187/"); 

      try { 
       // Add your data 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
       nameValuePairs.add(new BasicNameValuePair("id", "12345")); 
       nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!")); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

       // Execute HTTP Post Request 
       HttpResponse response = httpclient.execute(httppost); 

       Log.i(TAG, response.toString()); 
       return response.toString(); 
      } catch (ClientProtocolException e) { 
       // TODO Auto-generated catch block 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(String response) { 
      super.onPostExecute(response); 

      //do something with you response, connected with UI thread. 
     } 
    } 
} 
+0

Да, его работы большое спасибо Но теперь на моем logCat я вижу: I/victorMessage: [email protected] как сделать здесь, чтобы показать здесь содержимое ответа я использовал Log.i (TAG, response.toString()); –

+0

Это зависит от того, что ваш сервер возвращается для вас. Проверьте этот ответ http://stackoverflow.com/a/10684201/3225458. – rom4ek

+0

Я пробовал это, но при отладке: errorŞ connot find symol method getEntinity() –