我想为Android应用程序创建一个自定义记录器.当应用程序生成大量信息时,应在单独的线程中完成日志记录.我不想使用Android日志,因为我需要以特定格式编写日志.多个线程将同时写入日志文件,因此我使用队列来保留日志消息
这是我的代码
Queue<LogEntry> logQueue = new LinkedBlockingQueue<LogEntry>();
LogWritterThread logWritterThread = new LogWritterThread();
// to queue the log messages
public void QueueLogEntry(String message)
{
LogEntry le = new LogEntry(message);
{
logQueue.add(le);
logQueue.notifyAll();
}
logWritterThread.start();
}
class LogWritterThread extends Thread
{
public void run()
{
try
{
while(true)
{
//thread waits until there are any logs to write in the queue
if(logQueue.peek() == null)
synchronized(logQueue){
logQueue.wait();
}
if(logQueue.peek() != null)
{
LogEntry logEntry;
synchronized(logQueue){
logEntry = logQueue.poll();
}
// write the message …
Run Code Online (Sandbox Code Playgroud) 我在根文件夹中保存了一个文件,并尝试在webview中打开它.
这是我保存的代码:
OutputStream outstream = null;
outstream = openFileOutput(fileName ,MODE_WORLD_READABLE);
/// if file the available for writing
if (outstream != null) {
/// prepare the file for writing
OutputStreamWriter outputreader = new OutputStreamWriter(outstream);
BufferedWriter buffwriter = new BufferedWriter(outputreader);
/// write the result into the file
buffwriter.write(result);
}
/// close the file
outstream.close();
} catch (java.io.FileNotFoundException e) {
System.out.println("File not found in the writing...");
} catch (IOException e) {
System.out.println("In the writing...");
}
Run Code Online (Sandbox Code Playgroud)
这是我调用文件的代码:
fileView.getSettings().setJavaScriptEnabled(true);
fileView.loadUrl("file:///" + name); <---
Run Code Online (Sandbox Code Playgroud)
并在应用程序内部,它给我一个文件未找到错误.
任何见解都有帮助.
我的应用程序执行一些背景数据收集,我正在添加对用户网络首选项的支持,例如执行后台更新和数据漫游.我已经有以下检查:
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if(cm.getBackgroundDataSetting()) {
...
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnected()) {
Run Code Online (Sandbox Code Playgroud)
使用清单中的必填项:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
Run Code Online (Sandbox Code Playgroud)
这一切看起来都很好,但我想知道我是否应该检查其他任何东西?我担心检查数据漫游,但是文档声明networkInfo.isAvailable()
为我检查这个.那么我需要为网络设置实施任何其他检查吗?我应该注意这个领域还有什么吗?
我是初学者Android开发人员.我试图绕过ViewPager.在我尝试使用此示例之前:
http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-horizontal-view-paging/
我的视图有效,但无法在其中运行功能,我被告知我需要在ViewPager中使用Fragments.
我选择了这个教程:
http://tamsler.blogspot.co.uk/2011/11/android-viewpager-and-fragments-part-ii.html
我有一个ViewPager的基础知识,片段工作:
FragmentPagerActivity.java
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
public class FragmentPagerActivity extends FragmentActivity {
private static final int NUMBER_OF_PAGES = 10;
private ViewPager mViewPager;
private MyFragmentPagerAdapter mMyFragmentPagerAdapter;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mViewPager = (ViewPager) findViewById(R.id.viewpager);
mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mMyFragmentPagerAdapter);
}
private static class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
return PageFragment.newInstance("My Message " + index); …
Run Code Online (Sandbox Code Playgroud) 在我有一个将从一个单独的线程(使用AsyncTask)更新的UI的场景中,我可以将AsyncTask定义为活动的内部类,但是这有两个缺点我发现有问题:
什么是好的解决方案?使用内部类,但将它所做的一切都抽象到其他类?将对Activity的引用传递给AsyncTask?总是将AsyncTask类定义为内部类,只接受源文件会很大?
好的,在搜索了我可以在这个主题上找到的各种主题之后,尝试了一些似乎对其他人有用的东西......我已经屈服于发布我自己的问题的必要性.
作为Android和Java的总菜鸟,你将不得不原谅像孩子一样跟我说话的需要:)
我有一个到目前为止有3个活动的应用程序.一个主窗口,用作导航屏幕,用于选择其他两个中的一个.第一个工作完美,但当我尝试2号按钮时......它崩溃了.
我有一些代码,我试图在onCreate上运行...所以当我看到它通常是导致崩溃的XML布局时......我注释掉了Java代码......并且presto布局加载正常.
将代码重新放入,它再次崩溃.
查看LogCat,我看到一行显示"获取资源编号0x0000000d的值时没有包标识符"
然后是关于致命异常和关闭虚拟机的各种线路.
因此,我从其他帖子中获得了信心,我去了R.java文件,看看哪个资源有那个ID ...而且它不在那里.它们全部以0x7f开头...现在唯一以"d"结尾的是具有ID"game_Answer1"的文本视图.但我不确定这是否是它所指的.
我确实尝试过Eclipse clean命令,以及删除R.java ...同样的问题.
下面是似乎崩溃的java代码...再次,在我的意大利面条代码中笑声,因为这是Java中的尝试#2,超越了一个hello world app!
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import java.util.Random;
public class playgame extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gamelayout);
//set up first question
genQuestion();
}
Random generator = new Random();
public void genQuestion() {
int i = generator.nextInt(25);
int correct = generator.nextInt(2)+1;
TextView g_answera = (TextView) findViewById(R.id.game_Answer1);
TextView g_answerb = (TextView) findViewById(R.id.game_Answer2);
TextView …
Run Code Online (Sandbox Code Playgroud) 在我调试时,我发现GetCacheDir返回 /data/data/yourapp/cache/
但是当我存储文件时,我在该路径中找不到任何东西(带有shell),但在/sdcard/Android/data/yourapp/cache/
我找到了缓存文件?谁能告诉我为什么?
我如何按日期或名称对此数组进行排序?
String[][] datetable= new String[21][2];
datetable[0][0] = "2011.01.01";
datetable[0][1] = "Name1";
datetable[1][0] = "2011.01.03";
datetable[1][1] = "Name2";
.
.
.
datetable[20][0] = "2011.02.16";
datetable[20][1] = "Name3";
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个帮助器类来启动Activity
并获取返回结果(startActivityForResult
)以避免开发人员编写自己的onActivityResult
代码并封装复杂的内部细节.
即:来电者的代码:
MyIntent i = new MyIntent();
i.getMyData(new OnData() { public void onData(Bundle data) {....} );
Run Code Online (Sandbox Code Playgroud)
我尝试Activity
在MyIntent中创建一个"虚拟" 只是为了能够覆盖onActivityResult
,但是活动需要在清单中声明,这是帮助程序类试图避免的.没有"setOnActivityResult"这将是一个很好的选择.
那么,如何以Activity
编程方式创建并"附加"它以使其具有有效状态?
创建之后new Activity()
我想调用内部的活动"附加".
我试图使用MediaController.MediaPlayerControl
,以便MediaController
在我的自定义视图的底部显示,但我无法让它工作.它的崩溃在ctrl.show();
具有以下例外,每当我尝试加载这样的观点:
E/AndroidRuntime(3007):引起:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null无效; 你的活动在运行吗?
这是我的代码.
public class MediaPlayerView extends ImageView implements MediaPlayerControl {
private MediaPlayer mp;
private MediaController ctrl;
private Uri data;
private Context mContext;
public MediaPlayerView(Context context, Uri data) {
super(context);
this.mContext = context;
this.data = data;
init();
}
public void init() {
mp = new MediaPlayer();
try {
mp.setDataSource(mContext, data);
mp.prepare();
} catch(IOException e) {
e.printStackTrace();
}
ctrl = new MediaController(mContext);
ctrl.setMediaPlayer(this);
ctrl.setAnchorView(this);
ctrl.setEnabled(true);
ctrl.show();
}
public boolean canPause() …
Run Code Online (Sandbox Code Playgroud)