2016-06-30 21 views
1

私は初めてWebサービスを試してみたいと思います。私が欲しいのは、JSONコード全体で文字列を取得することです私は何らかの理由でそれを手に入れません。Webサービスが動作しない(Androidスタジオ)

AndroidManifest(アプリ名を無視する):

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.rome.networkplis"> 
<uses-permission android:name="android.permission.INTERNET"/> 
    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

MainActivity.java:

package com.example.rome.networkplis; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 


public class MainActivity extends AppCompatActivity { 
    TextView textView; 
    String h = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     textView = (TextView) findViewById(R.id.textView); 
     WebService webService = new WebService(); 
     h = webService.json(); 
     if (h == null) 
      textView.setText("not working"); 
     else 
      textView.setText(h); 
    } 
} 

WebServiceクラス:

package com.example.rome.networkplis; 


import android.os.AsyncTask; 
import android.util.Log; 
import org.json.JSONObject; 
import java.io.BufferedReader; 
import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.net.URLConnection; 

public class WebService extends AsyncTask<String, Void, String> { 
    String h = null; 
    @Override 
    protected String doInBackground(String... params) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       URLConnection urlConnection = null; 
       InputStream in = null; 
       try { 
        URL url = new URL("http://eanousa.tumblr.com/api/read/json"); 
        urlConnection = url.openConnection(); 
        in = urlConnection.getInputStream(); 
        h = getStringFromInputStream(in); 
       } 
       catch (Exception e){ 
        e.printStackTrace(); 
       } 
      } 
     }; 
     Thread thread = new Thread(r); 
     thread.start(); 
     return h; 
    } 


    public String json() { 
     String title = null; 
     try { 
      JSONObject everything = new JSONObject(doInBackground("")); 
      JSONObject thumbObj = everything.getJSONObject("tumblelog"); 
      title = thumbObj.getString("title"); 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
     } 
     return title; 

    } 
    private static String getStringFromInputStream(InputStream is) { 

     BufferedReader br = null; 
     StringBuilder sb = new StringBuilder(); 

     String line; 
     try { 

      br = new BufferedReader(new InputStreamReader(is)); 
      while ((line = br.readLine()) != null) { 
       sb.append(line); 
      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if (br != null) { 
       try { 
        br.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 

     return sb.toString(); 

    } 
} 

はあなたの時間を取って、助けようとしてくれてありがとう私。

+0

AsyncTaskを完全に誤って使用しています。質問をする前にチュートリアルやGoogleをもう少しお楽しみください。また、Web通話用にOkHttpを使用すると、簡単です。 – Vucko

答えて

0

Runnableオブジェクトは必要ありません。コードを直接doInBackgroundメソッドで実行するだけです。

1

あなたWebServiceクラスはAsyncTaskを拡張するので、あなただけのタスクを開始するためにWebServiceに​​を呼び出す必要があります。 に​​を呼び出すと、runInBackground()メソッドがバックグラウンドスレッドから自動的に呼び出されます。そこに新しいRunnableを作成する必要はありません。 Webサービスを呼び出すだけで、レスポンスを文字列として返すことができます。 runInBackgroundメソッドが返すものは、パラメータとしてonPostExecuteに送信されます。 onPostExecuteでは、応答のリスナーに通知する場所です。

関連する問題