Android AsyncTask-如何从url显示数据
我已经读了很多关于这个主题的书,但是我仍然没有得到我想要的结果。 我有一个URL(),我需要从中获取数据并将其显示在android屏幕上。 我遵循了本教程:,但我只需要显示数据,而不是计算 我已经创建了一个onPreExecute、onPostExecute和一个doInBackground,它应该在那里获取数据但我有一个错误:com.example.ivap.msnis.MainActivity'不是封闭类 我需要从url获取数据并将其存储在变量中。 这是我的密码:Android AsyncTask-如何从url显示数据,android,android-asynctask,Android,Android Asynctask,我已经读了很多关于这个主题的书,但是我仍然没有得到我想要的结果。 我有一个URL(),我需要从中获取数据并将其显示在android屏幕上。 我遵循了本教程:,但我只需要显示数据,而不是计算 我已经创建了一个onPreExecute、onPostExecute和一个doInBackground,它应该在那里获取数据但我有一个错误:com.example.ivap.msnis.MainActivity'不是封闭类 我需要从url获取数据并将其存储在变量中。 这是我的密码: package com.e
package com.example.ivanp.msnis;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* A simple {@link Fragment} subclass.
*/
public class TvrdjavaFragment extends Fragment {
Button btnIdinaperiod;
TextView pokaziServer;
String rezultat = "";
String strURL = "http://e085d133.ngrok.io/android_merenja";
public TvrdjavaFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_tvrdjava, container, false);
// Inflate the layout for this fragment
pokaziServer = (TextView) view.findViewById(R.id.testServer);
int i = Integer.parseInt(pokaziServer.getText().toString());
new NabaviServer().execute();
});
return view;
}
public class NabaviServer extends AsyncTask<String, String, String>
{
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(String s) {
//super.onPostExecute(s);
Toast.makeText(MainActivity.this, "Izlazak je: " + rezultat,Toast.LENGTH_LONG);
}
@Override
protected String doInBackground(String... params) {
try{
URL url = new URL(strURL);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setRequestMethod("GET");
con.connect();
BufferedReader bf = new BufferedReader(new InputStreamReader(con.getInputStream())); //??s
String value = bf.readLine();
System.out.println("test " + value);
rezultat = value;
}
catch(Exception e)
{
System.out.println(e);
}
return null;
}
}
}
package com.example.ivanp.msnis;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.support.v4.app.Fragment;
导入android.support.v4.app.FragmentTransaction;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.Button;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.text.simpleDataFormat;
导入java.util.Date;
/**
*一个简单的{@link Fragment}子类。
*/
公共类TvrdjavaFragment扩展了片段{
按钮时间段;
文本视图服务器;
字符串rezultat=“”;
字符串strURL=”http://e085d133.ngrok.io/android_merenja";
公共TvrdjavaFragment(){
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment_tvrdjava,容器,false);
//为该碎片膨胀布局
pokaziServer=(TextView)view.findviewbyd(R.id.testServer);
int i=Integer.parseInt(pokaziServer.getText().toString());
新建NabaviServer().execute();
});
返回视图;
}
公共类NabaviServer扩展异步任务
{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的void onPostExecute(字符串s){
//super.onPostExecute(s);
Toast.makeText(MainActivity.this,“Izlazak je:+rezultat,Toast.LENGTH_LONG);
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
试一试{
URL=新URL(strURL);
HttpURLConnection con=(HttpURLConnection)url.openConnection();
con.setRequestMethod(“GET”);
con.connect();
BufferedReader bf=新的BufferedReader(新的InputStreamReader(con.getInputStream());/
字符串值=bf.readLine();
系统输出打印项次(“测试”+数值);
rezultat=数值;
}
捕获(例外e)
{
系统输出打印ln(e);
}
返回null;
}
}
}
更改此选项
Toast.makeText(MainActivity.this, "Izlazak je: " + rezultat,Toast.LENGTH_LONG);
对此
Toast.makeText(getActivity(), "Izlazak je: " + rezultat,Toast.LENGTH_LONG).show();
因为您的代码存在于TvrdjavaFragment
中,并且在此片段内,您不能使用MainActivity.this作为上下文,您可以使用getActivity()
获取片段内的活动上下文
最好是在android提供的日志中打印响应来检查输出,比如您可以使用Log.d(“Izlazak je:”,rezultat)代码>,您可以在此处阅读有关日志的更多信息更改此选项
Toast.makeText(MainActivity.this, "Izlazak je: " + rezultat,Toast.LENGTH_LONG);
对此
Toast.makeText(getActivity(), "Izlazak je: " + rezultat,Toast.LENGTH_LONG).show();
因为您的代码存在于TvrdjavaFragment
中,并且在此片段内,您不能使用MainActivity.this作为上下文,您可以使用getActivity()
获取片段内的活动上下文
最好是在android提供的日志中打印响应来检查输出,比如您可以使用Log.d(“Izlazak je:”,rezultat)代码>,您可以在此处阅读有关日志的更多信息您的toast正在使用未知上下文
请将其更改为应用程序上下文或本地上下文
Toast.makeText(getActivity(), "Izlazak je: " + rezultat,Toast.LENGTH_LONG);
}
您的祝酒词使用了未知上下文
请将其更改为应用程序上下文或本地上下文
Toast.makeText(getActivity(), "Izlazak je: " + rezultat,Toast.LENGTH_LONG);
}
Toast.makeText
使用对象MainActivity.this
,但它在片段类中。通常,XXX。此
仅在类XXX中用于引用类XXX实例本身
选择1
您可以调用getActivity()
来获取片段所附加的活动的引用
但是要小心,根据Fragment的生命周期getActivity()
只返回Fragment.onAttach
和Fragment.onDetach
之间的有效值。如果onPostExecute
在onTach
之前或之后执行,则getActivity()
将返回null
因此,请在使用之前检查getActivity()
的返回值。否则将导致崩溃
选择2
您还可以将应用程序上下文用于Toast。下面的代码创建您自己的应用程序类,然后您可以将MyApplication.getInstance()
用作代码中任何地方的上下文。像这样Toast.makeText(MyApplication.getInstance(),…).show()
。记住在makeText
之后调用show()
,您的代码将丢失它
公共类MyApplication扩展了应用程序{
private static MyApplication instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public static MyApplication getInstance(){
return instance;
}
}Toast.makeText
使用对象MainActivity.this
,但它在您的Fragment类中。通常,XXX。此
仅在类XXX中用于引用类XXX实例本身
选择1
您可以调用getActivity()
来获取片段所附加的活动的引用
但是要小心,根据Fragment的生命周期getActivity()
只返回Fragment.onAttach
和Fragment.onDetach
之间的有效值。如果在onAttach
之前执行onPostExecute
,或