2016-01-05 8 views
11

के साथ एंड्रॉइड को कैसे कनेक्ट करें मैं अब कुछ समय से कोड को समझने की कोशिश कर रहा हूं, हालांकि इसमें कोई सफलता नहीं मिली है। हर बार ऐप कुछ यादृच्छिक अपवाद फेंक कर दुर्घटनाग्रस्त हो जाता है।HTTPsURLConnection

मैंने इस कोड को यूट्यूब पर एक ट्यूटोरियल से सीखा और इसके बावजूद, कोड मेरे लिए काम नहीं करता है।

import android.content.Context; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.AsyncTask; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

import org.w3c.dom.Text; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.nio.Buffer; 

import javax.net.ssl.HttpsURLConnection; 

public class MainActivity extends AppCompatActivity { 
Button b1; 
TextView t1; 
private Context context; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    b1=(Button)findViewById(R.id.bthhit); 
    t1=(TextView)findViewById(R.id.tvJSONitem); 

    b1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      new JSONTask().execute("http://jsonparsing.parseapp.com/jsonData/moviesDemoItem.txt"); 
     } 
    }); 

} 

public class JSONTask extends AsyncTask<String,String,String>{ 
    HttpsURLConnection connection = null; 
    BufferedReader reader = null; 

    @Override 
    protected String doInBackground(String... params) { 

     try { 
      URL url=new URL(params[0]); 
      connection= (HttpsURLConnection)url.openConnection(); 
      connection.connect(); 

      InputStream stream= connection.getInputStream(); 

      reader = new BufferedReader(new InputStreamReader(stream)); 
      String line; 
      StringBuffer buffer= new StringBuffer(); 
      while((line=reader.readLine())!=null){ 
       buffer.append(line); 
      } 

      return buffer.toString(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if(connection!=null) { 
       connection.disconnect(); 
      } 
      try { 
       if(reader!=null){ 
        reader.close(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     t1.setText(result); 

    } 
} 
} 

Logcat यह दिखाता है:

01-05 00:46:09.018 5573-5580/? E/art: Failed sending reply to debugger: Broken pipe 
01-05 00:46:17.852 5573-5706/com.example.test.jsonparser E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 
    Process: com.example.test.jsonparser, PID: 5573 
    java.lang.RuntimeException: An error occurred while executing doInBackground() 
     at android.os.AsyncTask$3.done(AsyncTask.java:309) 
     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:234) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
     at java.lang.Thread.run(Thread.java:818) 
    Caused by: java.lang.ClassCastException: com.android.okhttp.internal.huc.HttpURLConnectionImpl cannot be cast to javax.net.ssl.HttpsURLConnection 
     at com.example.test.jsonparser.MainActivity$JSONTask.doInBackground(MainActivity.java:58) 
     at com.example.test.jsonparser.MainActivity$JSONTask.doInBackground(MainActivity.java:49) 
     at android.os.AsyncTask$2.call(AsyncTask.java:295) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)  
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  
     at java.lang.Thread.run(Thread.java:818)  
01-05 00:46:19.104 5573-5587/com.example.test.jsonparser E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab792110 

उत्तर

21

कृपया ध्यान दें कि आपके URL प्रोटोकॉल HTTP और नहीं HTTPS है। java.net का उपयोग करने का प्रयास करें। HttpURLConnection ऑब्जेक्ट या "https: // ..." URL।

+1

आपको बहुत बहुत धन्यवाद! विश्वास मत करो मैं कुछ बेवकूफ पर याद किया! बड़ी मदद –

+0

मैंने java.net का उपयोग किया है। असुरक्षित यूआरएल के लिए HttpURLConnection लेकिन Google Play store पर प्रकाशित एप्लिकेशन के दौरान HttpURLConnection कार्यान्वयन स्वीकार नहीं करेगा। Play store द्वारा अलर्ट संदेश - "आपका ऐप होस्टनाम वेरिफायर इंटरफ़ेस का असुरक्षित कार्यान्वयन का उपयोग कर रहा है।" कृपया कोई समाधान प्रदान करें? –

0

हैं .getResponseCode() या ... अपने अनुप्रयोग में आवश्यक नहीं हैं, तो आप के रूप में अच्छी सामान्य URLConnection वर्ग का उपयोग कर सकते जैसे कुछ विशिष्ट विधियों, जो अपवाद के इस प्रकार शुरू करने से बचना होगा, क्योंकि इसके लिए माता-पिता वर्ग है HttpURLConnection और एचटीपीएस ... किसी भी तरह से कक्षाएं।

संबंधित मुद्दे