簡體   English   中英

Android網路連線問題

[英]Android internet connection issue

我正在編寫一個使用互聯網的應用程序,我已授予以下權限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.NETWORK"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

使用WIFI時一切正常,但是當它連接到H + 3G或4G時,它將停止在POST或GET模式下工作。 我已經將所有請求或將某些內容發布到服務器的任務放在aSyncTask中,但是沒有結果。

有什么我想念的嗎?

編輯:帶有代碼的活動

public class ParkeerActivity extends ActionBarActivity {


  @
  Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_parkeer);

    DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker);
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date());
    datePicker.init(calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.MONTH), calendar.get(Calendar.YEAR), new DatePicker.OnDateChangedListener() {@
      Override
      public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        updateSpacesLeft();
      }
    });
    RadioGroup rg = (RadioGroup) findViewById(R.id.radioGroup);
    rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {@
      Override
      public void onCheckedChanged(RadioGroup group, int checkedId) {
        updateSpacesLeft();
      }
    });
    Button reservationBtn = (Button) findViewById(R.id.reservationButton);
    reservationBtn.setEnabled(false);
    reservationBtn.setOnClickListener(new View.OnClickListener() {@
      Override
      public void onClick(View v) {
        reservationClicked();

      }
    });
  }


  @
  Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_parkeer, menu);
    return true;
  }

  @
  Override
  public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
      return true;
    }

    return super.onOptionsItemSelected(item);
  }
  public void reservationClicked() {
    AsyncTask < Void, Void, String > task = new AsyncTask < Void, Void, String > () {@
      Override
      protected String doInBackground(Void...params) {
        String formattedDate = getFormattedDateForUrl();
        String selectedTime = getSelectedTime();
        EditText commentText = (EditText) findViewById(R.id.editText);
        String comment = commentText.getText().toString();
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ParkeerActivity.this);
        String accessToken = prefs.getString("accessToken", null);
        Ion.with(ParkeerActivity.this)
          .load("http://-/reservations")
          .setBodyParameter("accessToken", accessToken)
          .setBodyParameter("date", formattedDate)
          .setBodyParameter("time", selectedTime)
          .setBodyParameter("comment", comment)
          .asJsonObject()
          .withResponse()
          .setCallback(new FutureCallback < Response < JsonObject >> () {@
            Override
            public void onCompleted(Exception e, Response < JsonObject > result) {
              if (result.getHeaders().code() == 201) {
                AlertDialog.Builder alert = new AlertDialog.Builder(ParkeerActivity.this);
                alert.setMessage("Reservering gelukt");
                alert.show();
              } else if (result.getHeaders().code() != 201) {
                AlertDialog.Builder alert = new AlertDialog.Builder(ParkeerActivity.this);
                alert.setMessage("Reservering mislukt");
                alert.show();
              };
            }
          });
        return null;
      }
    };
    task.execute();
  }

它在reservationClicked()時崩潰

一旦找到將手機連接到PC的電纜,logcat將被發布

EDIT2:移動設備(不是模擬器)上的Logcat異常

04-18 13:48:48.489  18475-19199/com.parkeerapp.-.parkeerapp D/MyLogs﹕ (296 ms) http://-/parkingspaces/available: Connecting socket
04-18 13:48:48.489  18475-19199/com.parkeerapp.-.parkeerapp D/MyLogs﹕ (0 ms) http://-/parkingspaces/available: Executing request.
04-18 13:48:48.499  18475-19199/com.parkeerapp.-.parkeerapp D/MyLogs﹕ (2 ms) http://-/parkingspaces/available: Connecting socket
04-18 13:48:58.549  18475-19199/com.parkeerapp.-.parkeerapp D/MyLogs﹕ (10357 ms) http://-/parkingspaces/available: Response is not cacheable
04-18 13:48:58.559  18475-19199/com.parkeerapp.-.parkeerapp D/MyLogs﹕ (10359 ms) http://-/parkingspaces/available: Connection successful
04-18 13:48:58.569  18475-19199/com.parkeerapp.-.parkeerapp D/MyLogs﹕ (10078 ms) http://-/parkingspaces/available: Response is not cacheable
04-18 13:48:58.569  18475-19199/com.parkeerapp.-.parkeerapp D/MyLogs﹕ (10079 ms) http://-/parkingspaces/available: Connection successful
04-18 13:48:58.579  18475-18475/com.parkeerapp.-.parkeerapp D/AndroidRuntime﹕ Shutting down VM
04-18 13:48:58.579  18475-18475/com.parkeerapp.-.parkeerapp W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41859da0)
04-18 13:48:58.579  18475-19199/com.parkeerapp.-.parkeerapp D/MyLogs﹕ (10386 ms) http://-/parkingspaces/available: Recycling keep-alive socket
04-18 13:48:58.579  18475-18475/com.parkeerapp.indivirtual.parkeerapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.parkeerapp.-.parkeerapp, PID: 18475
    java.lang.NullPointerException
            at com.parkeerapp.-.parkeerapp.ParkeerActivity$5$1.onCompleted(ParkeerActivity.java:154)
            at com.parkeerapp.-.parkeerapp.ParkeerActivity$5$1.onCompleted(ParkeerActivity.java:151)
            at com.koushikdutta.async.future.SimpleFuture.handleCallbackUnlocked(SimpleFuture.java:107)
            at com.koushikdutta.async.future.SimpleFuture.setComplete(SimpleFuture.java:141)
            at com.koushikdutta.async.future.SimpleFuture.setComplete(SimpleFuture.java:124)
            at com.koushikdutta.ion.IonRequestBuilder$1.run(IonRequestBuilder.java:244)
            at com.koushikdutta.async.AsyncServer$RunnableWrapper.run(AsyncServer.java:57)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:146)
            at android.app.ActivityThread.main(ActivityThread.java:5679)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
            at dalvik.system.NativeStart.main(Native Method)
04-18 13:48:58.589  18475-19199/com.parkeerapp.-.parkeerapp D/MyLogs﹕ (10094 ms) http://-/parkingspaces/available: Recycling keep-alive socket
  1. 如果您以這種方式使用Ion ,則無需使用AsyncTask。
  2. 您應該先盲目檢查result是否為null

有時我也遇到過類似的問題。 如果連接中斷,則有時返回resultnull

@Override
public void onCompleted(Exception e, JsonObject result) {
     if (e != null) {
         // failed.
         // return
     }

     if (result == null) {
         // failed
         // return
     }
}

有時即使異常為null,結果也為null。

問題是在3G和4G上使用了代理

Ion.with(ParkeerActivity.this)
                    .load(url )
                    .proxy(ip_adres, 8080)

做到了

當前的問題是谷歌Oauth說需要許可,但這將是一個新主題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM