2017-04-02 4 views
-1

Ich habe einen Fehler beim Erstellen meines Codes auf einem Android-Gerät.AndroidRuntime: FATALE AUSNAHME: AsyncTask # 1

Wenn ich auf Start klicke, um die Koordinate zu erhalten, wird die Koordinate auf dem Monitor angezeigt, aber meine Anwendung wurde gestoppt und sendet keine Datenkoordinaten auf meinem Server.

Der Fehlerbericht von Android Studio:

--------- beginning of crash E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 
    Process: id.codefun.gps, PID: 2418 
    java.lang.RuntimeException: An error occurred while executing doInBackground() 
     at android.os.AsyncTask$3.done(AsyncTask.java:325) 
     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 
     at java.util.concurrent.FutureTask.setException(FutureTask.java:223) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
     at java.lang.Thread.run(Thread.java:761) 
    Caused by: java.lang.ClassCastException: com.android.okhttp.internal.huc.HttpURLConnectionImpl cannot be cast 
to javax.net.ssl.HttpsURLConnection 
     at id.codefun.gps.BackgroundTask.doInBackground(BackgroundTask.java:41) 
     at id.codefun.gps.BackgroundTask.doInBackground(BackgroundTask.java:19) 
     at android.os.AsyncTask$2.call(AsyncTask.java:305) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)  
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)  
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)  
     at java.lang.Thread.run(Thread.java:761)  I/Choreographer: Skipped 41 frames! The application may be doing too 
much work on its main thread. Application terminated. 

MainActivity.java

import android.Manifest; import android.content.BroadcastReceiver; 
import android.content.Context; import android.content.Intent; import 
android.content.IntentFilter; import 
android.content.pm.PackageManager; import android.os.Build; import 
android.support.annotation.NonNull; import 
android.support.v4.content.ContextCompat; import 
android.support.v7.app.AppCompatActivity; import android.os.Bundle; 
import android.view.View; import android.widget.Button; import 
android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 

    private Button btn_start, btn_stop; 
    private TextView textView; 
    private BroadcastReceiver broadcastReceiver; 
    String dataf; 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     if(broadcastReceiver == null){ 
      broadcastReceiver = new BroadcastReceiver() { 
       @Override 
       public void onReceive(Context context, Intent intent) { 

        textView.append("\n" +intent.getExtras().get("coodinates")); 

        dataf = intent.getExtras().get("coodinates").toString(); 
        System.out.println(dataf); 
        String method = "dataKirim"; 
        BackgroundTask backgroundTask = new BackgroundTask(this); 
        backgroundTask.execute(method,dataf); 
        finish(); 
       } 
      }; 
     } 
     registerReceiver(broadcastReceiver, new IntentFilter("location_update")); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     if(broadcastReceiver != null){ 
      unregisterReceiver(broadcastReceiver); 
     } 
    } 

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

     btn_start = (Button) findViewById(R.id.button); 
     btn_stop = (Button) findViewById(R.id.button2); 
     textView = (TextView) findViewById(R.id.textView); 

     if(!runtime_permissions()) 
      enable_buttons(); 
    } 

    private void enable_buttons() { 
     btn_start.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view){ 
       Intent i =new Intent(getApplicationContext(),gps.class); 
       startService(i); 
      } 
     }); 
     btn_stop.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view){ 
       Intent i =new Intent(getApplicationContext(),gps.class); 
       stopService(i); 
      } 
     }); 
    } 

    private boolean runtime_permissions(){ 
     if(Build.VERSION.SDK_INT >=23 && ContextCompat.checkSelfPermission(this, 
Manifest.permission.ACCESS_FINE_LOCATION) != 
PackageManager.PERMISSION_GRANTED && 
ContextCompat.checkSelfPermission(this, 
Manifest.permission.ACCESS_COARSE_LOCATION) != 
PackageManager.PERMISSION_GRANTED){ 
      requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION},100); 
      return true; 
     } 
     return false; 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){ 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     if(requestCode==100){ 
      if(grantResults[0]==PackageManager.PERMISSION_GRANTED && grantResults[1]==PackageManager.PERMISSION_GRANTED){ 
       enable_buttons(); 
      }else{ 
       runtime_permissions(); 
      } 
     } 
    } } 

gps.java

import android.app.Service; 
import android.content.Context; 
import android.content.Intent; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.provider.Settings; 
import android.support.annotation.Nullable; 

public class gps extends Service { 

    private LocationListener listener; 
    private LocationManager locationManager; 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     listener = new LocationListener() { 
      @Override 
      public void onLocationChanged(Location location){ 
       Intent i = new Intent("location_update"); 
       i.putExtra("coodinates",location.getLongitude()+"-"+location.getLatitude()+"-"); 
       sendBroadcast(i); 
      } 

      @Override 
      public void onProviderDisabled(String s) { 
       Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       startActivity(i); 
      } 
     }; 
     locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE); 
     //noinspection MissingPermission 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,3000,0,listener); 

    } 
} 

BackgroundTask.java

import android.content.BroadcastReceiver; import 
android.content.Context; import android.os.AsyncTask; import 
android.widget.Toast; 

import java.io.BufferedWriter; import java.io.IOException; import 
java.io.InputStream; import java.io.OutputStream; import 
java.io.OutputStreamWriter; import java.net.MalformedURLException; 
import java.net.URL; import java.net.URLEncoder; 

import javax.net.ssl.HttpsURLConnection; 

import static android.widget.Toast.makeText; 


public class BackgroundTask extends AsyncTask<String, Void, String> { 

    BroadcastReceiver ctx; 
    BackgroundTask(BroadcastReceiver ctx){ 
     this.ctx = ctx; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     String post_url = "http://codefun.id/jajal_query_mysqli.php"; 
     String method = params[0]; 
     System.out.println(method); 
     System.out.println(params[1]); 
     if(method.equals("dataKirim")){ 
      String datag = params[1]; 
      try { 
       URL url = new URL(post_url); 
       HttpsURLConnection httpsURLConnection = (HttpsURLConnection)url.openConnection(); 
       httpsURLConnection.setRequestMethod("POST"); 
       httpsURLConnection.setDoOutput(true); 
       OutputStream OS = httpsURLConnection.getOutputStream(); 
       BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(OS,"UTF-8")); 
       String Data = URLEncoder.encode("latlon","UTF-8") +"="+ URLEncoder.encode(datag,"UTF-8"); 
       bufferedWriter.write(Data); 
       bufferedWriter.flush(); 
       bufferedWriter.close(); 
       OS.close(); 
       InputStream IS = httpsURLConnection.getInputStream(); 
       IS.close(); 
       return "kirim sukses"; 
      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
     super.onProgressUpdate(values); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     //makeText(ctx, result,Toast.LENGTH_LONG).show(); 
    } 

} 

Bitte helfen Sie.

Antwort

0

Bitte beachten Sie, dass Ihr URL-Protokoll HTTP und nicht HTTPS ist. Versuchen Sie es mit einem java.net.HttpURLConnection-Objekt oder einer URL "https: // ...".

import javax.net.ssl.HttpsURLConnection; 

mit

java.net.HttpURLConnection 
+0

@Keyumar Thumar ersetzen: Vielen Dank, jetzt kann ich Anwendungsdaten an den Server senden, aber nachdem die Daten-Anwendung gesendet nicht mehr läuft. Warum ist es passiert? – andan

+0

@andan Protokolle hinzufügen, so dass ich herausfinden kann. und akzeptiere ans, damit es für andere voll ist. Vielen Dank. :) –

+0

D/NetworkSecurityConfig: Nein Network Security Config angegeben, Plattform standardmäßig mit W/IInputConnectionWrapper: finishComposingText auf inaktiv InputConnection W/IInputConnectionWrapper: reportFullscreenMode auf inexistent InputConnection W/IInputConnectionWrapper: finishComposingText auf inaktiv InputConnection – andan

Verwandte Themen