我需要一些易于理解的术语帮助。我已经尝试在多个论坛上提出这个问题了,但是尽管我已经指明我在Android构建和Java方面只有基本的技能,但仍然会得到一些知识。[/ p>
当我在这里问我最初的问题时,用户天网非常有帮助,但他/她促使我做的研究证明很难跟进。 https://stackoverflow.com/questions/28403243/how-to-make-an-app-that-syncs-via-internet
我想创建一个带有textview的应用程序,每次用户打开应用程序时都会通过互联网进行更新。
最好的方法是什么?我还需要做些什么呢?
提前谢谢!
为了了解我的新鲜感,这是我发布的应用程序:https://play.google.com/store/apps/details?id=theveshtheva.debatebreaker
编辑:我尝试了一些东西,但它似乎没有用。有人能告诉我我做错了吗?我尝试从中提取数据的网页位于: http://ktjdaily.blogspot.com/2015/02/menu-of-day.html
这是我的活动java文件:
package theveshtheva.practice;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import android.widget.TextView;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
public class onlinetext extends ActionBarActivity {
private String HTML;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_onlinetext);
/*FROM HERE*/
TextView outtext = (TextView) findViewById(R.id.textView);
try {
getHTML();
} catch (Exception e) {
e.printStackTrace();
}
outtext.setText("" + HTML);
/*TO HERE*/
}
private void getHTML() throws IOException
{
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://ktjdaily.blogspot.com/2015/02/menu-of-day.html"); //URL!
HttpResponse response = httpClient.execute(httpGet, localContext);
String result = "";
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String line;
while ((line = reader.readLine()) != null) {
result += line + "\n";
HTML = result;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_onlinetext, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}

这里是Manifest文件,我已设置权限:
<?xml version="1.0" encoding="utf-8" ?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="theveshtheva.practice">
<uses-permission android:name="android.permission.INTERNET" />
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme">
<activity android:name=".onlinetext" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
&#13;
答案 0 :(得分:0)
Android中已经有HTTP apis执行此操作。就像一个地震监视器示例应用程序,它通过HTTP在后台服务中提取XML。
从那里开始。
答案 1 :(得分:0)
我觉得有很多关于如何将Android应用程序与在线服务或后端系统同步的问题。所以基本上,我会尝试在这里公开一些你可能会这样做的方法,我会尽量保持简单:
1)移动应用程序之外的世界
好的,所以你想创建一个通过互联网发送和检索信息的应用程序......很好!但首先,在考虑您的应用之前,您是否考虑过您的服务器?保存应用应该操作的信息的在线服务?所以,是的!当您开始考虑编写将执行任何在线同步的应用程序时,您的服务器/服务应该已准备就绪并且正常工作。顺便提一下,合理的建议是开始将“应用程序”这个术语作为整个服务环境,包括移动应用程序和所有内容,而不是每个人说的单个移动应用程序。
如果您有自己的在线服务,或者您只需要使用已准备就绪的第三方在线服务,那么这就是第1步的结束。
2)与外界沟通
您已经拥有功能性在线服务。现在您需要设置与之通信的方式。将“沟通部分”视为一个不同的项目。不要认为它只是您的移动应用程序和后端系统之间的桥梁。将其视为从任何环境到系统的任何应用程序的桥梁。应用程序可以通过独特的方式访问您的系统,您的系统可以与他们联系,交换有价值的信息以了解他们所关注的内容。我们在这里有一些选择,但我会坚持使用RESTApi。我不会在这里描述什么是RESTApi
以及你如何实际编写代码(我想这一定是你最关心的问题之一),因为有人已经在这个史诗SO question中做了。
你真正需要理解的是整个概念,然后你可以检查一些框架(有很多)来实际实现它(你会发现这是最容易的部分)。要结束第2步,这里有一个非常简单的图表来显示它(不是最好的,我知道):
3)最后,你的Android应用
使用RESTApi时,我们将处理http请求。为了做到这一点,我们在Android应用程序中有很多方法。我将使用内置的HttpClient提供一些代码,以便更好地理解:RestClient.java。此类是一个真正的基本休息客户端,只需执行POST
和GET
http请求:
RestClient client = new RestClient();
client.execute("http://youronlineservice.com:3430/api/somegetrequest",RequestMethod.GET);
client.execute("http://youronlineservice.com:3430/api/somepostrequest",RequestMethod.POST);
现在,在处理android环境时,请注意NetworkOnMainThreadException:
当应用程序尝试在其主线程上执行网络操作时引发的异常。
因此,我强烈建议在处理简单的http请求时使用AsyncTask,因为:
AsyncTask可以正确,轻松地使用UI线程。该类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。
AsyncTask旨在成为Thread和Handler的辅助类,并不构成通用的线程框架。理想情况下,AsyncTasks应该用于短操作(最多几秒钟。)如果需要保持线程长时间运行,强烈建议您使用java.util.concurrent包提供的各种API,例如Executor,ThreadPoolExecutor和FutureTask。
异步任务由在后台线程上运行的计算定义,其结果在UI线程上发布。异步任务由3种泛型类型定义,称为Params,Progress和Result,以及4个步骤,称为onPreExecute,doInBackground,onProgressUpdate和onPostExecute。
结束时,正如您可能想知道的那样,当您为api执行http请求时,您必须处理将要发生的响应。正如您将要弄清楚的那样,根据您为api设计的格式,您可以使用各种类型来处理响应。
主要是,你可能会使用XML或JSON。但别担心!关于如何在Android应用程序中使用这些格式有很多东西,包括一些很棒的框架,你最好发现自己最适合自己的东西。
完成此操作后,您可能需要检查其他一些内容以增加应用中的同步体验,例如:
http://developer.android.com/training/sync-adapters/creating-sync-adapter.html
http://developer.android.com/reference/android/app/Service.html
请注意,您可以获得最佳参考资料:http://developer.android.com/training/index.html
希望它可以帮助你和他人!