Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AsyncTask执行一次(仅当应用程序启动时)_Java_Android_Android Asynctask - Fatal编程技术网

Java AsyncTask执行一次(仅当应用程序启动时)

Java AsyncTask执行一次(仅当应用程序启动时),java,android,android-asynctask,Java,Android,Android Asynctask,我真的不知道这是否是一个异步任务问题,但就我所见,这个类似乎缺少了一些东西 我有以下代码: package com.example.webserviceejemplo; import java.io.IOException; import java.io.UnsupportedEncodingException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.h

我真的不知道这是否是一个异步任务问题,但就我所见,这个类似乎缺少了一些东西

我有以下代码:

package com.example.webserviceejemplo;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import android.view.View.OnClickListener;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;


public class ActividadPrincipal extends Activity 
{
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.actividad_principal);

        // Objectos de la vista
        final TextView txtvFeed = (TextView) findViewById(R.id.txtvFeed);
        final EditText txtXMLUrl = (EditText) findViewById(R.id.txtXMLUrl);
        final Button btnMostrarXML = (Button) findViewById(R.id.btnMostrarXML);

        // Scroll vertical (mas una propiedad en el XML)
        txtvFeed.setMovementMethod(new ScrollingMovementMethod());

        btnMostrarXML.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) 
            {
                new XMLHandler().execute(txtXMLUrl.getText().toString());
            }
        });

    }

    private class XMLHandler extends AsyncTask<String, Void, String>
    {

        @Override
        protected String doInBackground(String... urls) 
        {
            String xml = null;
            try 
            {
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(urls[0]);
                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                xml = EntityUtils.toString(httpEntity);
            } 
            catch (UnsupportedEncodingException e)
            {
                e.printStackTrace();
            } 
            catch (ClientProtocolException e) 
            {
                e.printStackTrace();
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            }
            return xml;
        }

        @Override
        protected void onPostExecute(String result) 
        {  
            setContentView(R.layout.actividad_principal);
            TextView txtvFeed = (TextView) findViewById(R.id.txtvFeed);
            txtvFeed.setText(result);
        }
    }
}
package com.example.webserviceejempo;
导入java.io.IOException;
导入java.io.UnsupportedEncodingException;
导入org.apache.http.HttpEntity;
导入org.apache.http.HttpResponse;
导入org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.util.EntityUtils;
导入android.view.view.OnClickListener;
导入android.app.Activity;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.text.method.ScrollingMovementMethod;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.TextView;
公共类活动主体扩展活动
{
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.actividad_principal);
//维斯塔酒店
最终文本视图txtvFeed=(文本视图)findViewById(R.id.txtvFeed);
最终EditText txtXMLUrl=(EditText)findViewById(R.id.txtXMLUrl);
最后一个按钮btnMostrarXML=(按钮)findViewById(R.id.btnMostrarXML);
//垂直滚动(mas una propiedad en el XML)
setMovementMethod(新的ScrollingMovementMethod());
btnMostrarXML.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v)
{
新的XMLHandler().execute(txtXMLUrl.getText().toString());
}
});
}
私有类XMLHandler扩展了异步任务
{
@凌驾
受保护的字符串doInBackground(字符串…URL)
{
字符串xml=null;
尝试
{
DefaultHttpClient httpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(URL[0]);
HttpResponse HttpResponse=httpClient.execute(httpPost);
HttpEntity HttpEntity=httpResponse.getEntity();
xml=EntityUtils.toString(httpEntity);
} 
捕获(不支持的编码异常e)
{
e、 printStackTrace();
} 
捕获(客户端协议例外e)
{
e、 printStackTrace();
} 
捕获(IOE异常)
{
e、 printStackTrace();
}
返回xml;
}
@凌驾
受保护的void onPostExecute(字符串结果)
{  
setContentView(R.layout.actividad_principal);
TextView txtvFeed=(TextView)findViewById(R.id.txtvFeed);
txtvFeed.setText(结果);
}
}
}
这个布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="${packageName}.${activityClass}" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/url_to_show"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/txtXMLUrl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textUri" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/btnMostrarXML"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="14dp"
        android:text="@string/show_xml" />

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/txtvFeed"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:scrollbars="vertical"
                android:text="@string/feed_to_display" />
        </LinearLayout>

    </ScrollView>

</LinearLayout>

我想做的是单击按钮并在名为“txtvFeed”的文本视图中显示远程XML的内容(是的,不进行解析)。现在的问题是,所有的工作都很好,但就在您第一次这样做时,我的意思是,当您启动应用程序时,它只工作一次。然后,如果在EditText中输入另一个提要url并单击该按钮,它将不会显示该提要的内容。事实上,我不知道显示内容后在做什么,因为我根本没有收到任何消息

我根本不知道问题出在哪里。我只有1个layout和1.java,仅供您参考


欢迎任何帮助,因为我是Android的新手:)。

试试这段代码。它应该有用

public class ActividadPrincipal extends Activity 
{
    final TextView txtvFeed;
@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.actividad_principal);

    // Objectos de la vista
    txtvFeed = (TextView) findViewById(R.id.txtvFeed);
    final EditText txtXMLUrl = (EditText) findViewById(R.id.txtXMLUrl);
    final Button btnMostrarXML = (Button) findViewById(R.id.btnMostrarXML);

    // Scroll vertical (mas una propiedad en el XML)
    txtvFeed.setMovementMethod(new ScrollingMovementMethod());

    btnMostrarXML.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) 
        {
            new XMLHandler().execute(txtXMLUrl.getText().toString());
        }
    });

}

private class XMLHandler extends AsyncTask<String, Void, String>
{

    @Override
    protected String doInBackground(String... urls) 
    {
        String xml = null;
        try 
        {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(urls[0]);
            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            xml = EntityUtils.toString(httpEntity);
        } 
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        } 
        catch (ClientProtocolException e) 
        {
            e.printStackTrace();
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
        return xml;
    }

    @Override
    protected void onPostExecute(String result) 
    {  
        txtvFeed.setText(result);
    }
}
公共类活动主体扩展活动
{
最终文本视图txtvFeed;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.actividad_principal);
//维斯塔酒店
txtvFeed=(TextView)findViewById(R.id.txtvFeed);
最终EditText txtXMLUrl=(EditText)findViewById(R.id.txtXMLUrl);
最后一个按钮btnMostrarXML=(按钮)findViewById(R.id.btnMostrarXML);
//垂直滚动(mas una propiedad en el XML)
setMovementMethod(新的ScrollingMovementMethod());
btnMostrarXML.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v)
{
新的XMLHandler().execute(txtXMLUrl.getText().toString());
}
});
}
私有类XMLHandler扩展了异步任务
{
@凌驾
受保护的字符串doInBackground(字符串…URL)
{
字符串xml=null;
尝试
{
DefaultHttpClient httpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(URL[0]);
HttpResponse HttpResponse=httpClient.execute(httpPost);
HttpEntity HttpEntity=httpResponse.getEntity();
xml=EntityUtils.toString(httpEntity);
} 
捕获(不支持的编码异常e)
{
e、 printStackTrace();
} 
捕获(客户端协议例外e)
{
e、 printStackTrace();
} 
捕获(IOE异常)
{
e、 printStackTrace();
}
返回xml;
}
@凌驾
受保护的void onPostExecute(字符串结果)
{  
txtvFeed.setText(结果);
}
}

}

在asynctask类中删除postexecute中的setcontentview,并在中仅声明和定义一次textview,您在中使用了两次。全局初始化文本视图

TextView txtvFeed;  //globally

txtvFeed = (TextView) findViewById(R.id.txtvFeed);
像这样更改postexecute

 @Override
protected void onPostExecute(String result) 
{  
    txtvFeed.setText(result);
}

这与上面的答案几乎相同,因此我将对其进行更新投票,但在onCreate函数之外使其成为最终结果不允许您在:P之后对其进行更改。