2015-12-28 4 views
2

Так что я использую okHttp-клиент для получения некоторых данных о погоде с сайта. До сих пор я написал код, чтобы получить данные json и отобразить его, но я не получаю данные. Так, как я дважды проверял URL, и он работает. Heres код:Проблемы с получением json-данных с сайта

import android.support.v4.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import com.squareup.okhttp.Call; 
import com.squareup.okhttp.Callback; 
import com.squareup.okhttp.OkHttpClient; 
import com.squareup.okhttp.Request; 
import com.squareup.okhttp.Response; 

import java.io.IOException; 

public class MainActivityFragment extends Fragment { 

    public MainActivityFragment() { 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
     OkHttpClient client = new OkHttpClient(); 
     final TextView tv = (TextView)rootView.findViewById(R.id.display_json_data); 
     Request request = new Request.Builder().url("http://api.openweathermap.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7&APPID=c82bfbedf3241dd88e356bffea122761").build(); 
     Call call = client.newCall(request); 
     call.enqueue(new Callback() { 
      @Override 
      public void onFailure(Request request, IOException e) { 

      } 

      @Override 
      public void onResponse(Response response) throws IOException { 
       String jsonData = response.body().string(); 
       tv.setText(jsonData); 
      } 
     }); 

     return rootView; 

    } 
} 

Я добавил разрешение, требуемое в манифесте. Я не получаю выход, когда запускаю его на своем устройстве. Пожалуйста помоги.

+0

Вы можете проверить Что происходит в блоке OnFailure? Возможно, журнал IOException выйдет в журнал. – riggaroo

+0

После запроса, какой метод был вызван? onFailure или onResponse? Что такое исключение? –

+0

Возможно, я ошибаюсь, но когда я запрашиваю данные из Интернета, я делаю это в AsyncTask. –

ответ

1

Проверить ваши Права доступа в AndroidManifest:

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

Вы можете использовать UI Thread "runOnUiThread":

OkHttpClient client = new OkHttpClient(); 
final TextView tv = (TextView) findViewById(R.id.display_json_data); 
Request request = new Request.Builder().url("http://api.openweathermap.org/data/2.5/forecast/daily?q=94043&mode=json&units=metric&cnt=7&APPID=c82bfbedf3241dd88e356bffea122761").build(); 
Call call = client.newCall(request); 
call.enqueue(new Callback() { 

    @Override 
    public void onFailure(Request request, IOException e) { 

    } 

    @Override 
    public void onResponse(Response response) throws IOException { 
     final String jsonData = response.body().string(); 
     getActivity().runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       tv.setText(jsonData); 
      } 
     }); 
    } 
}); 
+0

Спасибо. – AppGeek

0

Вы можете попробовать это.

Response response = client.newCall(request).execute(); 
    return response.body().string(); 

Права доступа:

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

Ссылка Ссылка: http://square.github.io/okhttp/

Смежные вопросы